package com.cs.framework.common.util;

import java.lang.reflect.Array;
import java.util.Arrays;

/**
 * 数组工具类
 * 
 * @author hedongzhou
 * 
 */
public class ArrayUtils {

	/**
	 * 合并数组
	 * 
	 * @param <T>
	 * @param first
	 * @param second
	 * @param cls
	 * @return 如果两数组都未空，则返回空数组
	 */
	public static <T> T[] concat(T[] first, T[] second, Class<T> cls) {
		first = toArray(first, cls);
		second = toArray(second, cls);

		T[] result = Arrays.copyOf(first, first.length + second.length);

		System.arraycopy(second, 0, result, first.length, second.length);

		return result;
	}

	/**
	 * 根据数组应用，返回有效数组
	 * 
	 * @param <T>
	 * @param arr
	 * @param cls
	 * @return 如果数组不是null，则返回本身，否则返回空数组
	 */
	public static <T> T[] toArray(T[] arr, Class<T> cls) {
		if (arr == null) {
			return emptyArr(cls);
		} else {
			return arr;
		}
	}

	/**
	 * 获取空数组
	 * 
	 * @param <T>
	 * @param cls
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static <T> T[] emptyArr(Class<T> cls) {
		return (T[]) Array.newInstance(cls, 0);
	}

	/**
	 * 判断数组是否为null或为空
	 * 
	 * @param <T>
	 * @param arr
	 * @return
	 */
	public static <T> boolean isEmpty(T[] arr) {
		if (arr == null) {
			return true;
		} else {
			return arr.length > 0 ? false : true;
		}
	}

}
